home *** CD-ROM | disk | FTP | other *** search
/ Motor Sport Digital Archive Collection 1960s / Motor Sport Digital Archive Collection 1960s.iso / main.swf / scripts / mx / skins / RectangularBorder.as < prev   
Encoding:
Text File  |  2008-05-21  |  10.0 KB  |  298 lines

  1. package mx.skins
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.display.DisplayObjectContainer;
  5.    import flash.display.Graphics;
  6.    import flash.display.Loader;
  7.    import flash.display.LoaderInfo;
  8.    import flash.display.Shape;
  9.    import flash.events.ErrorEvent;
  10.    import flash.events.Event;
  11.    import flash.events.IOErrorEvent;
  12.    import flash.geom.Rectangle;
  13.    import flash.net.URLRequest;
  14.    import flash.system.ApplicationDomain;
  15.    import flash.system.LoaderContext;
  16.    import flash.utils.getDefinitionByName;
  17.    import mx.core.Container;
  18.    import mx.core.EdgeMetrics;
  19.    import mx.core.FlexLoader;
  20.    import mx.core.FlexShape;
  21.    import mx.core.IChildList;
  22.    import mx.core.mx_internal;
  23.    import mx.resources.ResourceBundle;
  24.    import mx.styles.ISimpleStyleClient;
  25.    import mx.utils.StringUtil;
  26.    
  27.    use namespace mx_internal;
  28.    
  29.    public class RectangularBorder extends Border
  30.    {
  31.       private static var resourceNotLoaded:String;
  32.       
  33.       mx_internal static const VERSION:String = "2.0.1.0";
  34.       
  35.       private static var packageResources:ResourceBundle = ResourceBundle.getResourceBundle("skins",ApplicationDomain.currentDomain);
  36.       
  37.       loadResources();
  38.       
  39.       private var backgroundImageWidth:Number;
  40.       
  41.       private var backgroundImageStyle:Object;
  42.       
  43.       mx_internal var loader:Loader;
  44.       
  45.       private var backgroundMask:Shape;
  46.       
  47.       private var backgroundImageHeight:Number;
  48.       
  49.       private var _backgroundImageRect:Rectangle;
  50.       
  51.       private var backgroundImage:DisplayObject;
  52.       
  53.       public function RectangularBorder()
  54.       {
  55.          super();
  56.          addEventListener(Event.REMOVED,removedHandler);
  57.       }
  58.       
  59.       private static function loadResources() : void
  60.       {
  61.          resourceNotLoaded = packageResources.getString("notLoaded");
  62.       }
  63.       
  64.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  65.       {
  66.          var newStyle:Object = null;
  67.          var cls:Class = null;
  68.          var imgParent:DisplayObjectContainer = null;
  69.          var childrenList:IChildList = null;
  70.          var newStyleObj:DisplayObject = null;
  71.          var loaderContext:LoaderContext = null;
  72.          var unscaledWidth:Number = param1;
  73.          var unscaledHeight:Number = param2;
  74.          if(!parent)
  75.          {
  76.             return;
  77.          }
  78.          newStyle = getStyle("backgroundImage");
  79.          if(newStyle != backgroundImageStyle)
  80.          {
  81.             backgroundImageStyle = newStyle;
  82.             if(backgroundImage)
  83.             {
  84.                imgParent = backgroundImage.parent;
  85.                childrenList = imgParent is Container ? Container(imgParent).rawChildren : IChildList(imgParent);
  86.                childrenList.removeChild(backgroundImage);
  87.             }
  88.             backgroundImage = null;
  89.             if(Boolean(newStyle) && Boolean(newStyle as Class))
  90.             {
  91.                cls = Class(newStyle);
  92.                initBackgroundImage(new cls());
  93.             }
  94.             else if(Boolean(newStyle) && newStyle is String)
  95.             {
  96.                try
  97.                {
  98.                   cls = Class(getDefinitionByName(String(newStyle)));
  99.                }
  100.                catch(e:Error)
  101.                {
  102.                }
  103.                if(cls)
  104.                {
  105.                   newStyleObj = new cls();
  106.                   initBackgroundImage(newStyleObj);
  107.                }
  108.                else
  109.                {
  110.                   mx_internal::loader = new FlexLoader();
  111.                   mx_internal::loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeEventHandler);
  112.                   mx_internal::loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorEventHandler);
  113.                   mx_internal::loader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR,errorEventHandler);
  114.                   loaderContext = new LoaderContext();
  115.                   loaderContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
  116.                   mx_internal::loader.load(new URLRequest(String(newStyle)),loaderContext);
  117.                }
  118.             }
  119.             else if(newStyle)
  120.             {
  121.                throw new Error(StringUtil.substitute(resourceNotLoaded,newStyle));
  122.             }
  123.          }
  124.          if(backgroundImage)
  125.          {
  126.             mx_internal::adjustBackgroundImage();
  127.          }
  128.       }
  129.       
  130.       private function completeEventHandler(param1:Event) : void
  131.       {
  132.          var _loc2_:DisplayObject = null;
  133.          if(!parent)
  134.          {
  135.             return;
  136.          }
  137.          _loc2_ = DisplayObject(LoaderInfo(param1.target).loader);
  138.          initBackgroundImage(_loc2_);
  139.          mx_internal::adjustBackgroundImage();
  140.          dispatchEvent(param1.clone());
  141.       }
  142.       
  143.       mx_internal function get backgroundImageRect() : Rectangle
  144.       {
  145.          return _backgroundImageRect;
  146.       }
  147.       
  148.       private function getBackgroundSize() : Number
  149.       {
  150.          var _loc1_:Number = NaN;
  151.          var _loc2_:Object = null;
  152.          var _loc3_:int = 0;
  153.          _loc1_ = NaN;
  154.          _loc2_ = getStyle("backgroundSize");
  155.          if(Boolean(_loc2_) && _loc2_ is String)
  156.          {
  157.             _loc3_ = int(_loc2_.indexOf("%"));
  158.             if(_loc3_ != -1)
  159.             {
  160.                _loc1_ = Number(_loc2_.substr(0,_loc3_));
  161.             }
  162.          }
  163.          return _loc1_;
  164.       }
  165.       
  166.       mx_internal function adjustBackgroundImage() : void
  167.       {
  168.          var _loc1_:DisplayObject = null;
  169.          var _loc2_:EdgeMetrics = null;
  170.          var _loc3_:* = false;
  171.          var _loc4_:Number = NaN;
  172.          var _loc5_:Number = NaN;
  173.          var _loc6_:Number = NaN;
  174.          var _loc7_:Number = NaN;
  175.          var _loc8_:Number = NaN;
  176.          var _loc9_:Number = NaN;
  177.          var _loc10_:Number = NaN;
  178.          var _loc11_:Number = NaN;
  179.          var _loc12_:Number = NaN;
  180.          var _loc13_:Number = NaN;
  181.          var _loc14_:Graphics = null;
  182.          _loc1_ = parent;
  183.          _loc2_ = _loc1_ is Container ? Container(_loc1_).viewMetrics : borderMetrics;
  184.          _loc3_ = getStyle("backgroundAttachment") != "fixed";
  185.          if(_backgroundImageRect)
  186.          {
  187.             _loc9_ = _backgroundImageRect.width;
  188.             _loc10_ = _backgroundImageRect.height;
  189.          }
  190.          else
  191.          {
  192.             _loc9_ = width - _loc2_.left - _loc2_.right;
  193.             _loc10_ = height - _loc2_.top - _loc2_.bottom;
  194.          }
  195.          _loc4_ = getBackgroundSize();
  196.          if(isNaN(_loc4_))
  197.          {
  198.             _loc11_ = 1;
  199.             _loc12_ = 1;
  200.          }
  201.          else
  202.          {
  203.             _loc13_ = _loc4_ * 0.01;
  204.             _loc11_ = _loc13_ * _loc9_ / backgroundImageWidth;
  205.             _loc12_ = _loc13_ * _loc10_ / backgroundImageHeight;
  206.          }
  207.          backgroundImage.scaleX = _loc11_;
  208.          backgroundImage.scaleY = _loc12_;
  209.          _loc5_ = Math.round(0.5 * (_loc9_ - backgroundImageWidth * _loc11_));
  210.          _loc6_ = Math.round(0.5 * (_loc10_ - backgroundImageHeight * _loc12_));
  211.          backgroundImage.x = _loc2_.left;
  212.          backgroundImage.y = _loc2_.top;
  213.          backgroundMask.x = _loc2_.left;
  214.          backgroundMask.y = _loc2_.top;
  215.          if(_loc3_ && _loc1_ is Container)
  216.          {
  217.             _loc5_ -= Container(_loc1_).horizontalScrollPosition;
  218.             _loc6_ -= Container(_loc1_).verticalScrollPosition;
  219.          }
  220.          backgroundImage.alpha = getStyle("backgroundAlpha");
  221.          backgroundImage.x += _loc5_;
  222.          backgroundImage.y += _loc6_;
  223.          _loc7_ = width - _loc2_.left - _loc2_.right;
  224.          _loc8_ = height - _loc2_.top - _loc2_.bottom;
  225.          if(backgroundMask.width != _loc7_ || backgroundMask.height != _loc8_)
  226.          {
  227.             _loc14_ = backgroundMask.graphics;
  228.             _loc14_.clear();
  229.             _loc14_.beginFill(16777215);
  230.             _loc14_.drawRect(0,0,_loc7_,_loc8_);
  231.             _loc14_.endFill();
  232.          }
  233.       }
  234.       
  235.       private function errorEventHandler(param1:Event) : void
  236.       {
  237.       }
  238.       
  239.       private function initBackgroundImage(param1:DisplayObject) : void
  240.       {
  241.          var _loc2_:IChildList = null;
  242.          var _loc3_:int = 0;
  243.          backgroundImage = param1;
  244.          if(param1 is Loader)
  245.          {
  246.             backgroundImageWidth = Loader(param1).contentLoaderInfo.width;
  247.             backgroundImageHeight = Loader(param1).contentLoaderInfo.height;
  248.          }
  249.          else
  250.          {
  251.             backgroundImageWidth = backgroundImage.width;
  252.             backgroundImageHeight = backgroundImage.height;
  253.             if(param1 is ISimpleStyleClient)
  254.             {
  255.                ISimpleStyleClient(param1).styleName = styleName;
  256.             }
  257.          }
  258.          _loc2_ = parent is Container ? Container(parent).rawChildren : IChildList(parent);
  259.          backgroundMask = new FlexShape();
  260.          backgroundMask.name = "backgroundMask";
  261.          backgroundMask.x = 0;
  262.          backgroundMask.y = 0;
  263.          _loc2_.addChild(backgroundMask);
  264.          _loc3_ = int(_loc2_.getChildIndex(this));
  265.          _loc2_.addChildAt(backgroundImage,_loc3_ + 1);
  266.          backgroundImage.mask = backgroundMask;
  267.       }
  268.       
  269.       mx_internal function set backgroundImageRect(param1:Rectangle) : void
  270.       {
  271.          _backgroundImageRect = param1;
  272.          invalidateDisplayList();
  273.       }
  274.       
  275.       mx_internal function get hasBackgroundImage() : Boolean
  276.       {
  277.          return backgroundImage != null;
  278.       }
  279.       
  280.       private function removedHandler(param1:Event) : void
  281.       {
  282.          var _loc2_:IChildList = null;
  283.          _loc2_ = parent is Container ? Container(parent).rawChildren : IChildList(parent);
  284.          if(backgroundImage)
  285.          {
  286.             _loc2_.removeChild(backgroundImage);
  287.             backgroundImage = null;
  288.          }
  289.          if(backgroundMask)
  290.          {
  291.             _loc2_.removeChild(backgroundMask);
  292.             backgroundMask = null;
  293.          }
  294.       }
  295.    }
  296. }
  297.  
  298.